package cn.le;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TransactionApplication {
    /**
     * 在spring-boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖
     * 的时候,框架会自动默认分别注入dataSourceTransactionManager或jpaTransactionManager.
     * 所以我们不需要任何额为配置就可以使用@Transactionl注解进行事务的使用
     *
     *  多数据源中,对于不同的数据源事务管理器也不一样,这时可以使用value属性指定配置事务管理器名即可,
     *  例如:@Transactional(value="transactionManagerPrimary")
     *
     *  事务隔离级别是指若干个并发的事务之间的隔离成都,与我们开发时候主要相关的场景包括脏读,重复读,幻读
     *  脏读:
     *      指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时一个事务也访问了这个数据,
     *  然后使用了这个数据
     *
     *  不可重复读:
     *      指在一个事务内,在这个事务还没有结束的时候,另一个事务也访问该同一条数据,那么第一个事务中的两次读取数据之间,
     * 由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的,这样就产生了在一个事务内两次读取到的数据是不一样的,
     * 因此称为不可重复读
     *
     *  幻读:
     *      指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中
     * 的所有数据,同时第二个数据也修改这个表中的数据,这种修改是向表中插入一行新的数据,那么以后就会发生操作第一个事务
     * 的用户发现表中还有
     *
     * 没有修改的数据行,就好像发生了幻觉,幻读是由插入或删除引起的
     *
     */
    public static void main(String[] args) {
        SpringApplication.run(TransactionApplication.class, args);
    }
}
